﻿
Offline.options = {
	checks: {
		
		xhr: {
			url: 'test.html?rand='+Math.floor((Math.random()*10000)+1)
		},
		  checkOnLoad: true,
		  // Should we monitor AJAX requests to help decide if we have a connection.
		  interceptRequests: false,
		  // Should we automatically retest periodically when the connection is down (set to false to disable).
		  reconnect: {
		    // How many seconds should we wait before rechecking.
		    initialDelay: 3,
		    // How long should we wait between retries.
		    delay: 3
		  },
		  // Should we store and attempt to remake requests which fail while the connection is down.
		  requests: false,		
		  game: false
			}

};
Offline.check();	

/*******************************************************************************
 * Initialisation des varibles stockées localement
 ******************************************************************************/	 
 
 	/* Pour l'utilisateur actuel */
 	var utilisateurActuel;
	if(typeof localStorage.utilisateurActuel === 'undefined'){
		localStorage.utilisateurActuel = '{}';	
		utilisateurActuel = {};
	}
	else{
		utilisateurActuel =  getVariableLocalStorage('utilisateurActuel',true);
	}
	

     /* Pour les themes */
     if(typeof localStorage.theme === 'undefined'){
		localStorage.theme = '0';	
	} 
        
	/* Pour l'historique */
	if(typeof localStorage.historique === 'undefined'){
		localStorage.historique = '[]';	
	} 
	
/*******************************************************************************
 * Application du theme
 ******************************************************************************/  
 
	$(function(){
		$('body').addClass('theme'+getVariableLocalStorage('theme',false)); 
	});

/*******************************************************************************
 * Gestion des appels ajax en cas de mode offline : optionislocal
 ******************************************************************************/   

	$.ajaxPrefilter( function(options, originalOptions, jqXHR) {
		if ( applicationCache &&
				applicationCache.status != applicationCache.UNCACHED &&
				applicationCache.status != applicationCache.OBSOLETE ) {			
			options.isLocal = true;
		}
	});

 
/*******************************************************************************
 * Bouton Haut de page
 ******************************************************************************/
	
	$(document).on('click','#btn_haut_page',function() {
		$('html,body').animate({scrollTop: 0}, 'slow');
	});

	$(window).scroll(function(){
		if($(window).scrollTop()<50){
			$('#btn_haut_page').css({display:'none'}); 
		}else{
			$('#btn_haut_page').css({display:'inline-block'}); 
		}
	});
	
/*******************************************************************************
 * Gestion des Hover 
 ******************************************************************************/
	
	/* Pour le menu */
	
	$(document).on('mouseover','#menu ul li',function(){	
		$(this).addClass('boutons_menu_hover');
	 });
	 
	 $(document).on('mouseout','#menu ul li',function(){	
		$(this).removeClass('boutons_menu_hover');
	 });
	
	/* Pour la recherche */

	$(document).on('mouseover','#resultats_recherche .affichage_qcm .panel',function(){	
		$(this).addClass('qcm_hover');
	 });
	 
	 $(document).on('mouseout','#resultats_recherche .affichage_qcm .panel',function(){	
		$(this).removeClass('qcm_hover');
	 });
	 
	 /* Pour l'affichage de la liste des QCM */
	 
	 $(document).on('mouseover','#liste_qcm .affichage_qcm .panel',function(){	
		$(this).addClass('qcm_hover');
	 });
	 
	 $(document).on('mouseout','#liste_qcm .affichage_qcm .panel',function(){	
		$(this).removeClass('qcm_hover');
	 });
	 
	 /* Pour les reponses d'un QCM */
	 
	  $(document).on('mouseover','#vue #affichage_qcm .affichage_choix li',function(){	
		$(this).find('label').addClass('reponse_hover');
	 });
	 
	 $(document).on('mouseout','#vue #affichage_qcm .affichage_choix li',function(){	
		$(this).find('label').removeClass('reponse_hover');
	 });
	 
	  /* Pour l'affichage de la liste des themes */
	 
	 $(document).on('mouseover','#liste_themes li',function(){	
		$(this).addClass('theme_hover');
	 });
	 
	 $(document).on('mouseout','#liste_themes li',function(){	
		$(this).removeClass('theme_hover');
	 });

/*******************************************************************************
 * Quand on clique dans les champs text, on cache les boutons retour et haut de page
 ******************************************************************************/		 
	 
	$(document).on('click','input[type=text], textarea',function(event){	
		event.stopPropagation();	
		$('#bloc_boutons').hide();
		$('#offline-ui').hide();		
	 });
	 
	 $(document).on('click','html, #effacer_recherche, #resultats_recherche',function(){	
		$('#bloc_boutons').show();
		$('#offline-ui').show();		
	 });
	 
/*******************************************************************************
 * Gestion des problèmes liés aux positions fixed lors du changement d'orientation
 ******************************************************************************/	 
	
	function onOrientationChange(){
		$('body').animate({scrollTop:$('body').scrollTop()},'fast');
	}
	document.addEventListener("orientationchange", onOrientationChange);

/*******************************************************************************
 * Autres fonctions
 ******************************************************************************/	 
	 
 	function getVariableLocalStorage(variable,json){

 		if(typeof localStorage.getItem(variable) === 'undefined' ){
			window.location.href = "./";
 		}
 		else{

 			var valeur = localStorage.getItem(variable);

 			if(json){
				valeur = JSON.parse(valeur);
 			}

 			return valeur;
 		}
 	}

 	function setVariableLocalStorage(variable,valeur,json){

 		if(typeof localStorage.getItem(variable) === 'undefined' ){
			window.location.href = "./";
 		}
 		else{
 			if(json){
				 valeur = JSON.stringify(valeur);
 			}
			localStorage.setItem(variable,valeur); 			
 		}
 	}

 	function dateDiff(date1, date2){
	    var diff = {}                           // Initialisation du retour
	    var tmp = date2 - date1;
	 	
	    tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
	    diff.sec = tmp % 60;                    // Extraction du nombre de secondes
	 
	    tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
	    diff.min = tmp % 60;                    // Extraction du nombre de minutes
	 
	    tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
	    diff.hour = tmp % 24;                   // Extraction du nombre d'heures
	     
	    tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
	    diff.day = tmp;
	     
	    return diff;
	}

	function cleanstring (str,type) {
										
		str = str.replace(/[\/]/g,' ');
		str = str.replace(/[\\]/,' ');
		str = str.replace(/["]/g,' ');
		str = str.replace(/[.]/g, ' ');
		str = str.replace(/[«]/g,' ');
		str = str.replace(/[»]/g,' ');
		str = str.replace(/[:]/g,' ');
		str = str.replace(/[,]/g,' ');
		str = str.replace(/[;]/g,' ');
		str = str.replace(/[']/g,' ');
		str = str.replace(/[-]/g,' ');
		str = str.replace(/[?]/g,' ');
		str = str.replace(/[{]/g,' ');
		str = str.replace(/[}]/g,' ');
		str = str.replace(/[(]/g,' ');
		str = str.replace(/[)]/g,' ');
		str = str.replace(/[°]/g,' ');
		str = str.replace(/[\^]/g,' ');
		str = str.replace(/[\n]/g,' ');
		str = str.replace(/[\r]/g,' ');	
		
		str = str.replace(/[š]/gi,'s').replace(/[Ð]/g,'dj').replace(/[ž]/gi,'z').replace(/[ñ]/gi,'n').replace(/[ýÿ]/gi,'y').replace(/[Þþ]/g,'b').replace(/[ß]/g,'ss');
		
		str = str.replace(/[àáâäæãå]/gi,'a').replace(/[éèêë]/gi,'e').replace(/[îïìí]/gi,'i').replace(/[ðôöòóõø]/gi,'o').replace(/[ûùüú]/gi,'u').replace(/[ç]/gi,'c');

		if(type == 1){
			str = str.replace(/\b(faut|les|peut|quel|fait|doit|sois|suis|est|qui|me|voir|voire|par|etre|sur|pas|pour|le|la|si|votre|vous|vos|notre|nos|avec|sans|sa|elle|elles|ils|et|au|été|sont|qui|que|quoi|dont|ou|ete|je|quand|le|la|les|du|de|des|dans|en|se|ses|ces|sa|ta|mes|un|une|ne|est|elle|il|lui)\b/gi,'');
			str = str.replace(/\b[a-zA-Z0-9]\b/g,'');
		}

		return str;
	}

	function truncateString(chaine, nbCaracteres) {
		if(chaine.length > nbCaracteres) {
			chaine = chaine.substring(0, nbCaracteres);
			var i = chaine.lastIndexOf(' ');
			if(i != -1) {
				chaine = chaine.substring(0, i) + "...";
			}
		}

		return chaine;
	}
	
	